package org.ansj.lucene3; import java.io.File; import java.net.URLEncoder; import java.util.ArrayList; import java.util.List; import org.apache.lucene.document.Document; import org.apache.lucene.document.Field; import org.apache.lucene.document.Field.Index; import org.apache.lucene.document.Field.Store; import org.apache.lucene.document.Field.TermVector; import org.apache.lucene.index.IndexReader; import org.apache.lucene.index.IndexWriter; import org.apache.lucene.index.IndexWriterConfig; import org.apache.lucene.queryParser.QueryParser; import org.apache.lucene.search.Explanation; import org.apache.lucene.search.IndexSearcher; import org.apache.lucene.search.Query; import org.apache.lucene.search.ScoreDoc; import org.apache.lucene.search.TopDocs; import org.apache.lucene.store.Directory; import org.apache.lucene.store.FSDirectory; import org.apache.lucene.util.Version; public class NearTest { public static void createIndex() throws Exception { IndexWriterConfig conf = new IndexWriterConfig(Version.LUCENE_32, new AnsjAnalysis()); Directory directory = FSDirectory.open(new File("c:/index")); IndexWriter writer = new IndexWriter(directory, conf); String str = "文化人;文化人谈文化"; String[] values = str.split(";"); for (String value : values) { Document doc = new Document(); Field field = new Field("test", value, Store.YES, Index.ANALYZED_NO_NORMS, TermVector.WITH_POSITIONS_OFFSETS); // field.setIndexOptions(IndexOptions.DOCS_AND_FREQS_AND_POSITIONS); doc.add(field); writer.addDocument(doc); writer.commit(); } writer.close(); } // public static void createIndex() throws Exception { // // IndexWriterConfig conf = new IndexWriterConfig(Version.LUCENE_32, new AnsjAnalysis()); // Directory directory = FSDirectory.open(new File("index")); // IndexWriter writer = new IndexWriter(directory, conf); // // String str = "文化人;文化人谈文化"; // String[] values = str.split(";"); // List<Document> docs = new ArrayList<Document>(); // for (String value : values) { // Document doc = new Document(); // Field field = new Field("test", value, Store.YES, Index.ANALYZED_NO_NORMS, TermVector.WITH_POSITIONS_OFFSETS); // // field.setIndexOptions(IndexOptions.DOCS_AND_FREQS_AND_POSITIONS); // doc.add(field); // docs.add(doc); // } // writer.addDocuments(docs); // writer.commit(); // writer.close(); // } public static void testSearch() throws Exception { String rules = "\"文化人谈文化\"~10"; IndexReader reader = IndexReader.open(FSDirectory.open(new File("index"))); IndexSearcher searcher = new IndexSearcher(reader); QueryParser parser = new QueryParser(Version.LUCENE_32, "test", new AnsjAnalysis()); Query query = parser.parse(rules); System.out.println(query.toString()); TopDocs topDocs = searcher.search(query, 10); ScoreDoc[] docs = topDocs.scoreDocs; System.out.println(docs.length); for (ScoreDoc scoreDoc : docs) { Document doc = searcher.doc(scoreDoc.doc); Explanation explain = searcher.explain(query, scoreDoc.doc) ; System.out.println(explain); System.out.println(doc); } } public static void main(String[] args) throws Exception { createIndex() ; testSearch() ; // System.out.println(URLEncoder.encode("+")); } }